import ToastUtil from "react-native/Libraries/Components/ToastAndroid/ToastAndroid";

const requestOptions = {
    method: 'GET',
    redirect: 'follow'
};
export default class FetchManager {

    /** * GET 请求 */
    static get(url, params, success, fail, error) {
        if (params) {
            //拼接参数
            for (let i = 0; i < params._parts.length; i++) {
                const paramsStr = params._parts[i][0] + "=" + params._parts[i][1];
                if (url.search(/\?/) === -1) {
                    url += '?' + paramsStr
                } else {
                    url += '&' + paramsStr
                }
            }

        }
        console.log(url)
        fetch(url, requestOptions)
            .then(response => response.json())
            //把response转为json
            .then(responseJson => {
                // 拿到上面的转好的json
                //根据实际的请求回来格式来处理回调
                if (responseJson['success'] === true) {
                    // 0为请求8成功
                    success && success(responseJson)
                } else {
                    fail && fail(responseJson)
                    //可以处理返回的错误信息
                }
            }).catch(e => {
            console.log(e)
            error && error(e)
        })
    }


    /** * POST 请求，经测试用FormData传递数据也可以 ,支持跨域与CooKie传递*/
    static post(url, formData, success, fail, error) {
        fetch(url, {
            credentials: 'include',
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'multipart/form-data',
                // 'Content-Type': 'application/x-www-form-urlencoded'
                // 'Cookie': ''
            },
            mode: "cors",
            body: formData
        }).then(response => response.json())
            //把response转为json
            .then(responseJson => {

                // 拿到上面的转好的json
                //根据实际的请求回来格式来处理回调

                if (responseJson['success'] === true) {
                    // 0为请求成功
                    success && success(responseJson)
                } else {
                    fail && fail(responseJson)
                    //可以处理返回的错误信息
                }
            }).catch(e => {
            console.log(e)
            error && error(e)
        })
    }

    /** * POST 请求，经测试用FormData传递数据也可以 Json格式 */
    static postJson(url, params, success, fail, error) {
        fetch(url, {
            credentials: 'include',
            method: 'POST',
            headers: {
                'Accept': '*/*',
                //媒体格式类型key/value格式
                // 'Accept': 'application/json;charset=UTF-8',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            //mode:"cors",
            body: JSON.stringify(params)
        }).then(response => response.json())
            //把response转为json
            .then(responseJson => {
                // 拿到上面的转好的json
                //根据实际的请求回来格式来处理回调
                if (responseJson['success'] === true) {
                    // 0为请求成功
                    success && success(responseJson)
                } else {
                    fail && fail(responseJson)
                    //可以处理返回的错误信息
                }
            }).catch(e => {
            console.log(e)
            error && error(e)
            ToastUtil.show("请检查您的网络是否已经连接");
        })
    }

    /** * @images uri数组 * @param FormData格式,没有参数的话传null */
    static uploadFile(url, images, params, success, fail, error) {
        let formData = new FormData();
        if (params) {
            formData = params;
        }
        for (let i = 0; i < images.length; i++) {
            let uri = images[i]
            let date = new Date()
            let name = date.getTime() + '.png'
            //用时间戳保证名字的唯一性
            let file = {
                uri: uri,
                type: 'multipart/form-data',
                name: name
            }
            formData.append('file', file)
        }
        fetch(url, {
            method: 'POST', headers: {
                'Accept': 'application/json',
                //媒体格式类型key/value格式
                'Content-Type': 'multipart/form-data',
                // customerId: customerId,
                // appId: appId
            }, body: formData
        }).then(response => response.json())
            //把response转为json
            .then(responseJson => {
                // 拿到上面的转好的json
                //根据实际的请求回来格式来处理回调
                if (responseJson['success'] === true) {
                    // 0为请求成功
                    success && success(responseJson)
                } else {
                    fail && fail(responseJson)
                    //可以处理返回的错误信息
                }
            }).catch(e => {
            console.log(e)
            error && error(e)
        })
    }
}

